package com.lemon.boot.common.service;

import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * @author 李猛
 * @datetime 2024/2/7 0:38
 * @description 接口对象
 */
public interface RedisService {
    /**
     * 有时效的保存
     *
     * @param key
     * @param value
     * @param time  单位是分钟
     * @return
     */
    boolean save(String key, Object value, long time, TimeUnit unit);

    /**
     * 有时效的保存
     *
     * @param key
     * @param value
     * @param time  单位是分钟
     * @return
     */
    boolean save(String key, Object value, String time, TimeUnit unit);

    /**
     * 永久保存
     *
     * @param key
     * @param value
     * @return
     */
    boolean save(String key, Object value);

    /**
     * 根据 key 删除数据
     *
     * @param key
     * @return
     */
    boolean del(String key);

    /**
     * 根据 key 删除数据
     *
     * @param keys
     * @return
     */
    boolean dels(String... keys);

    /**
     * 根据key获取数据
     *
     * @param key
     * @param tClass
     * @return
     */
    <T> T get(String key, Class<T> tClass);

    /**
     * 判断key是否存在
     *
     * @param key
     * @return
     */
    boolean has(String key);

    /**
     * 根据key设置过期时间
     *
     * @param key
     * @param time 单位分钟
     * @return
     */
    boolean expire(String key, long time, TimeUnit unit);

    /**
     * 根据 次数 锁定key
     *
     * @param key
     * @param times   总共多少次
     * @param timeout 锁定时长
     * @param unit    时间单位
     * @return
     */
    boolean lockByTimes(String key, int times, int timeout, TimeUnit unit);

    /**
     * 根据key获取key,value集合
     *
     * @param pattern
     * @return
     */
    <T> Map<String, T> keys(String pattern, Class<T> tClass);
}
